/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package traitements;

import bdd.QueriesClients;
import beans.CliClients;
import java.sql.SQLException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.http.HttpServletRequest;

/**
 *
 * @author
 * Hippolyte
 */
public class GererInscription {
    private static final String CHAMP_EMAIL = "emailinsc";
    private static final String CHAMP_EMAIL2 = "emailinsc2";
    private static final String CHAMP_MDP = "mdpinsc"; 
    private static final String CHAMP_MDP2 = "mdpinsc2"; 
    private static final String CHAMP_CONF = "confmdp"; 
    private static final String CHAMP_NOM  = "nomcli";
    private static final String CHAMP_PRENOM = "prenom";
    private static final String CHAMP_DATENAIS = "datenais";
    private static final String ERREUR_VALID = "erreur";
    
    
    private String resultat;
    private Map<String,String> erreurs = new HashMap<String, String>(); 
    private QueriesClients qClients;
    private ArrayList<CliClients>liste = new ArrayList();

    
    public GererInscription() {
        try {
            qClients = new QueriesClients();
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(GererInscription.class.getName()).log(Level.SEVERE, null, ex);
        } catch (SQLException ex) {
            Logger.getLogger(GererInscription.class.getName()).log(Level.SEVERE, null, ex);
        }
        
    }
        
    public String getResultat() {
        return resultat;
    }

    public Map<String, String> getErreurs() {
        return erreurs;
    }

    public QueriesClients getqClients() {
        return qClients;
    }

    public void setqClients(QueriesClients qClients) {
        this.qClients = qClients;
    }
    
    
    public CliClients verifierNvLog(HttpServletRequest request){
        String email = getValeurChamp(request, CHAMP_EMAIL);
        String mdp = getValeurChamp(request, CHAMP_MDP);
        String conf = getValeurChamp(request, CHAMP_CONF);
        
        CliClients cli = new CliClients();
        try {
            creerLogin(email);
        } catch (Exception ex) {
            setErreurs(CHAMP_EMAIL,ex.getMessage());
        }
        cli.setCliLogin(email);
        try {        
            creerMdp(mdp, conf);
        } catch (Exception ex) {
            setErreurs(CHAMP_MDP,ex.getMessage());
            setErreurs(CHAMP_CONF, null);
        }
        cli.setCliMdp(mdp);
                
       return cli;
    } 
    
    public CliClients verifierChamps(HttpServletRequest request){
        String nom = getValeurChamp(request, CHAMP_NOM);
        String prenom = getValeurChamp(request, CHAMP_PRENOM);
        String dateNais = getValeurChamp(request, CHAMP_DATENAIS);
        String sexe = request.getParameter("sexe");
        String newsletter = request.getParameter("newsletter");
        String emailinsc = getValeurChamp(request, CHAMP_EMAIL2);
        String mdp = getValeurChamp(request, CHAMP_MDP2);
        Date dateN;
        
        CliClients client = new CliClients();
        try {
            verifierNom(nom);
        } catch (Exception ex) {
            setErreurs(CHAMP_NOM,ex.getMessage());
        }
        client.setCliNom(nom);
        try {
            verifierPrenom(prenom);
        } catch (Exception ex) {
            setErreurs(CHAMP_PRENOM, ex.getMessage()); 
        }
        client.setCliPrenom(prenom);
        try {
            dateN = verifierDateNais(dateNais);
            client.setCliDateNaissance(dateN);
            SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
            dateNais = dateFormat.format(client.getCliDateNaissance());
            client.setCliDateN(dateNais); 
        } catch (Exception ex) {
            setErreurs(CHAMP_DATENAIS, "Format de date incorrect!"); 
        } 
        
        
        if(newsletter == null){
            client.setCliNewsletter(false);
        } else {
             client.setCliNewsletter(true);
        }
        
        if(sexe.equals("M.")){
            client.setCliSexe("M.");
        } else if(sexe.equals("Mlle.")){
            client.setCliSexe("Mlle.");
        } else {
            client.setCliSexe("Mme.");
        }
        client.setCliLogin(emailinsc);
        client.setCliMdp(mdp);
        client.setCliActif(true);
//        ArrayList<CliClients> listeClients = new ArrayList(); 
//        try {
//            listeClients = qClients.listerClients();
//            for(CliClients cli : listeClients){
//               if(client.equals(cli)){
//                    try { 
//                        throw new Exception("Le client existe déjà en base");
//                    } catch (Exception ex) {
//                        Logger.getLogger(GererInscription.class.getName()).log(Level.SEVERE, null, ex);
//                    }
//               }     
//           }
//        } catch (SQLException ex) {
//            Logger.getLogger(GererInscription.class.getName()).log(Level.SEVERE, null, ex);
//        }
//        
        return client;
       
    }
    
    
    public void creerLogin(String email) throws Exception {
        if(email !=null){
            if (!(email.matches("^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,4}$"))) {
                throw new Exception("Format d'adresse e-mail incorrect !");
            }
            liste = qClients.listerClients();
            for(CliClients client : liste){
                if(email.equals(client.getCliLogin())){
                    throw new Exception("Cette adresse email existe déjà !");                      
                }
            }
        } else {
          throw new Exception("Veuillez entrer votre adresse mail !");
        
        }   
        
    }
    
    
 
    public void creerMdp(String mdp,String conf) throws Exception{
        
       if(mdp!=null && conf!=null){
            if(mdp.length()< 4){
                throw new Exception(" Mot de passe de 4 caractères minimum !");
            } 
            if(!mdp.equals(conf)){
                throw new Exception("Les mots de passe doivent être identiques!");
            }    
       } else {
               throw new Exception("Mot de passe et confirmation obligatoires!");     
       }
       
    }
    
    public void verifierNom(String nom) throws Exception{
       if(nom!=null){
         if(nom.length()<3){
           throw new Exception("Un nom a au moins 3 caractères!");
         } 
         if(!(nom.matches("^[a-zA-Z]{3,50}$"))){
            throw new Exception("Le nom entré n'est pas valide!");
         }
         
       } else{
           throw new Exception("Veuillez saisir votre nom!");
       }
    }
    
    public void verifierPrenom(String prenom) throws Exception{
       if(prenom!=null){
         if(prenom.length()<3){
           throw new Exception("Un prénom a au moins 3 caractères!");
         } 
         if(!(prenom.matches("^[a-zA-Z]{3,50}$"))){
            throw new Exception("Le prénom entré n'est pas valide!");
         }
         
       } else{
           throw new Exception("Veuillez saisir votre prénom!");
       }
    }
    public Date verifierDateNais(String dateNais) throws Exception,ParseException{
        if(dateNais == null){
            throw new Exception("Veuillez saisir votre date de naissance!");
            
        } else {
            SimpleDateFormat formater = new SimpleDateFormat("dd/MM/yyyy");
            formater.setLenient(false);
            Date date = formater.parse(dateNais);
            return date; 
        }
        
    }
    
    
    
    private void setErreurs(String champ, String message){
         erreurs.put( champ, message );
    }
    
    private static String getValeurChamp( HttpServletRequest request, String nomChamp ) {
        String valeur = request.getParameter( nomChamp );
        if ( valeur == null || valeur.trim().length() == 0 ) {
            return null;
        } else {
            return valeur.trim();
        }
    }
   
    public int creerClients(CliClients c) {
        try {
            return qClients.creerClient(c);
        } catch (SQLException ex) {
            setErreurs(ERREUR_VALID, "Ce compte existe déjà!");
        }
        return 0;
    }
    
    public int modifierClient(CliClients c){
        try {
            return qClients.modifierClient(c);
        } catch (SQLException ex) {
            setErreurs(ERREUR_VALID, "Ce compte existe déjà!");
        }
        return 0;
    }


}
